import uiautomator2 as u2
import os
import time
import logging

# 配置详细日志
logging.basicConfig(level=logging.DEBUG)


def check_environment():
    """验证uiautomator2环境是否正常"""
    print("=" * 50)
    print("开始验证uiautomator2环境")
    print("=" * 50)

    # 步骤1: 检查ADB
    print("\n[步骤1] 检查ADB连接...")
    result = os.popen("adb devices").read()
    print(result)

    if "device" not in result:
        print("❌ 错误: 未找到已连接的设备")
        return False

    # 步骤2: 尝试连接设备
    print("\n[步骤2] 尝试连接设备...")
    try:
        # 尝试多种连接方式
        try:
            d = u2.connect()  # 自动连接
            print("✅ 自动连接成功")
        except:
            # 获取设备ID
            device_id = result.split("\n")[1].split("\t")[0]
            d = u2.connect(device_id)  # 指定设备ID连接
            print("✅ 指定设备ID连接成功")

        # 检查设备信息
        info = d.info
        print(f"设备信息: {info}")
        print(f"屏幕状态: {'开启' if d.info['screenOn'] else '关闭'}")
    except Exception as e:
        print(f"❌ 连接失败: {str(e)}")
        return False

    # 步骤3: 检查服务状态
    print("\n[步骤3] 检查服务状态...")
    try:
        # 检查atx-agent
        atx_status = os.popen("adb shell ps | grep atx-agent").read()
        print(f"atx-agent状态: {'运行中' if atx_status else '未运行'}")

        # 检查uiautomator服务
        uiautomator_status = os.popen("adb shell dumpsys activity services | grep uiautomator").read()
        print(f"uiautomator服务: {'运行中' if uiautomator_status else '未运行'}")

        if not atx_status or not uiautomator_status:
            print("⚠️ 尝试手动初始化...")
            os.system("python -m uiautomator2 init")
            time.sleep(5)  # 等待初始化完成
    except Exception as e:
        print(f"❌ 服务检查失败: {str(e)}")
        return False

    # 步骤4: 简单操作测试
    print("\n[步骤4] 执行简单操作测试...")
    try:
        print("-> 点亮屏幕")
        d.screen_on()

        print("-> 解锁屏幕")
        d.unlock()  # 如果设备有密码，可能需要额外处理

        print("-> 返回主屏幕")
        d.press("home")

        print("-> 截图验证")
        d.screenshot("verification.jpg")
        print("✅ 截图已保存为 verification.jpg")

        return True
    except Exception as e:
        print(f"❌ 操作测试失败: {str(e)}")
        return False


if __name__ == "__main__":
    if check_environment():
        print("\n🎉 环境验证通过！可以开始自动化测试")
    else:
        print("\n❌ 环境验证失败，请根据上述提示排查问题")